/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.db.explorer.infos; import java.io.IOException; import java.sql.*; import java.util.*; import org.netbeans.lib.ddl.*; import org.netbeans.lib.ddl.impl.*; import org.openide.nodes.Node; import org.netbeans.lib.ddl.adaptors.*; import org.netbeans.modules.db.DatabaseException; import org.netbeans.modules.db.explorer.DatabaseNodeChildren; import org.netbeans.modules.db.explorer.infos.*; import org.netbeans.modules.db.explorer.nodes.*; import org.netbeans.modules.db.explorer.actions.DatabaseAction; public class TableNodeInfo extends DatabaseNodeInfo { static final long serialVersionUID =-632875098783935367L; public void initChildren(Vector children) throws DatabaseException { initChildren(children, null); } private void initChildren(Vector children, String columnname) throws DatabaseException { try { DatabaseMetaData dmd = getSpecification().getMetaData(); String catalog = (String)get(DatabaseNode.CATALOG); String table = (String)get(DatabaseNode.TABLE); DriverSpecification drvSpec = getDriverSpecification(); // boolean jdbcOdbcBridge = (((java.sql.DriverManager.getDriver(dmd.getURL()) instanceof sun.jdbc.odbc.JdbcOdbcDriver) /*&& (!dmd.getDatabaseProductName().trim().equals("DB2/NT"))*/) ? true : false); boolean jdbcOdbcBridge = (((((String)get(DatabaseNode.DRIVER)).trim().equals("sun.jdbc.odbc.JdbcOdbcDriver")) && (!dmd.getDatabaseProductName().trim().equals("DB2/NT"))) ? true : false); // Primary keys Hashtable ihash = new Hashtable(); drvSpec.getPrimaryKeys(catalog, dmd, table); if (drvSpec.rs != null) { while (drvSpec.rs.next()) { DatabaseNodeInfo iinfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.PRIMARY_KEY, drvSpec.rs); String iname = (String)iinfo.get("name"); ihash.put(iname,iinfo); } drvSpec.rs.close(); } // Indexes Hashtable ixhash = new Hashtable(); drvSpec.getIndexInfo(catalog, dmd, table, true, false); if (drvSpec.rs != null) { while (drvSpec.rs.next()) { if (jdbcOdbcBridge) drvSpec.rsTemp.next(); if (drvSpec.rs.getString("COLUMN_NAME") == null) continue; DatabaseNodeInfo iinfo; if (jdbcOdbcBridge) iinfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.INDEXED_COLUMN, drvSpec.rsTemp); else iinfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.INDEXED_COLUMN, drvSpec.rs); String iname = (String)iinfo.get("name"); ixhash.put(iname,iinfo); } drvSpec.rs.close(); if (jdbcOdbcBridge) drvSpec.rsTemp.close(); } /* // Foreign keys Hashtable fhash = new Hashtable(); rs = dmd.getImportedKeys(catalog,user,table); while (rs.next()) { DatabaseNodeInfo finfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.FOREIGN_KEY, rs); String iname = (String)finfo.get("name"); fhash.put(iname,finfo); } rs.close(); */ // Columns drvSpec.getColumns(catalog, dmd, table, columnname); if (drvSpec.rs != null) { while (drvSpec.rs.next()) { if (jdbcOdbcBridge) drvSpec.rsTemp.next(); DatabaseNodeInfo nfo; String cname = drvSpec.rs.getString("COLUMN_NAME"); if (ihash.containsKey(cname)) nfo = (DatabaseNodeInfo)ihash.get(cname); else if (ixhash.containsKey(cname)) nfo = (DatabaseNodeInfo)ixhash.get(cname); // else // if (fhash.containsKey(cname)) { // nfo = (DatabaseNodeInfo)fhash.get(cname); else if (jdbcOdbcBridge) nfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, drvSpec.rsTemp); else nfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, drvSpec.rs); children.add(nfo); } drvSpec.rs.close(); if (jdbcOdbcBridge) drvSpec.rsTemp.close(); } } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } public void setProperty(String key, Object obj) { try { if (key.equals("remarks")) setRemarks((String)obj); put(key, obj); } catch (Exception ex) { ex.printStackTrace(); } } public void setRemarks(String rem) throws DatabaseException { String tablename = (String)get(DatabaseNode.TABLE); Specification spec = (Specification)getSpecification(); try { AbstractCommand cmd = spec.createCommandCommentTable(tablename, rem); cmd.execute(); } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } public void dropIndex(DatabaseNodeInfo tinfo) throws DatabaseException { DatabaseNode node = (DatabaseNode)tinfo.getNode(); DatabaseNodeChildren chld = (DatabaseNodeChildren)getNode().getChildren(); try { String cname = tinfo.getName(); Specification spec = (Specification)getSpecification(); // Add } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } public void delete() throws IOException { try { Specification spec = (Specification)getSpecification(); AbstractCommand cmd = spec.createCommandDropTable(getTable()); cmd.execute(); } catch (Exception e) { throw new IOException(e.getMessage()); } } /** Returns ColumnNodeInfo specified by info * Compares code and name only. */ public ColumnNodeInfo getChildrenColumnInfo(ColumnNodeInfo info) { String scode = info.getCode(); String sname = info.getName(); try { Enumeration enu = getChildren().elements(); while (enu.hasMoreElements()) { ColumnNodeInfo elem = (ColumnNodeInfo)enu.nextElement(); if (elem.getCode().equals(scode) && elem.getName().equals(sname)) { return elem; } } } catch (Exception e) {} return null; } public void addColumn(String tname) throws DatabaseException { try { Vector chvec = new Vector(1); // !!! TADY JE ASI PROBLEM S REFRESHEM TABULEK PO PRIDANI !!! // ResultSet rs; // DatabaseMetaData dmd = getSpecification().getMetaData(); // String catalog = (String)get(DatabaseNode.CATALOG); // String table = (String)get(DatabaseNode.TABLE); initChildren(chvec, tname); if (chvec.size() == 1) { DatabaseNodeInfo nfo = (DatabaseNodeInfo)chvec.elementAt(0); DatabaseNodeChildren chld = (DatabaseNodeChildren)getNode().getChildren(); DatabaseNode dnode = chld.createSubnode(nfo, true); } } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } } /* * <<Log>> * 18 Gandalf-post-FCS1.16.1.0 4/10/00 Radko Najman * 17 Gandalf 1.16 1/26/00 Radko Najman JDBC-ODBC bridge HACK * 16 Gandalf 1.15 1/25/00 Radko Najman new driver adaptor * version * 15 Gandalf 1.14 12/15/99 Radko Najman driver adaptor * 14 Gandalf 1.13 11/27/99 Patrik Knakal * 13 Gandalf 1.12 11/15/99 Radko Najman MS ACCESS * 12 Gandalf 1.11 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 11 Gandalf 1.10 10/8/99 Radko Najman getUser() method * replaced by dmd.getUserName() * 10 Gandalf 1.9 9/15/99 Slavek Psenicka * 9 Gandalf 1.8 9/13/99 Slavek Psenicka * 8 Gandalf 1.7 9/13/99 Slavek Psenicka * 7 Gandalf 1.6 9/8/99 Slavek Psenicka adaptor changes * 6 Gandalf 1.5 7/21/99 Slavek Psenicka * 5 Gandalf 1.4 6/15/99 Slavek Psenicka debug prints * 4 Gandalf 1.3 6/9/99 Ian Formanek ---- Package Change To * org.openide ---- * 3 Gandalf 1.2 5/21/99 Slavek Psenicka new version * 2 Gandalf 1.1 5/14/99 Slavek Psenicka new version * 1 Gandalf 1.0 4/23/99 Slavek Psenicka * $ */